Skip to main content

Migration Guide: From MAX to XMediator

Integration

This section helps you migrate from the AppLovin MAX SDK to the XMediator SDK in your iOS project.


Initialize the SDK Comparison

OperationMAXXMediator
SDK InitializationALSdk.shared().initialize(...)XMediatorAds.startWith(appKey:initSettings:...)
Set User IDsettings.userIdentifier = "user-id"UserProperties(userId: "user-id")
Set Test Modebuilder.testDeviceAdvertisingIdentifiers = [...]InitSettings(test: true)
Set Extra ParamssetExtraParameterForKey("key", value)InitSettings(userProperties: UserProperties(customProperties: ...))

Optional Configuration

FeatureMAXXMediator
Set User IDsettings.userIdentifier = "user-id"UserProperties(userId: "user-id")
Extra Parameters (e.g., tokens)setExtraParameterForKey("uid2", ...)InitSettings (passed during init)
Enable Loggingsettings.isVerboseLogging = trueInitSettings(verbose: true)
Test Modebuilder.testDeviceAdvertisingIdentifiers = ["«your-IDFA»"]InitSettings(test: true)
SKAdNetwork IDsManual Info.plist update requiredManual Info.plist update required

X3M Integration

MAX Integration


Ad Formats

This section helps you migrate Banner Ad implementation from MAX to XMediator SDK.


OperationMAXXMediator
Set DelegateadView.delegate = selfXMediatorAds.banner.addDelegate(self)
Load BanneradView.loadAd()XMediatorAds.banner.load(placementId:)
Show BanneradView.isHidden = falsebannerView.isHidden = false

Delegate Method Comparison

Event / ActionMAX (MAAdViewAdDelegate)XMediator (BannerAdsDelegate)
Banner Loadedfunc didLoad(_ ad: MAAd)func didLoad(placementId: String, result: LoadResult)
Failed to Loadfunc didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError)Handled internally
Clickedfunc didClick(_ ad: MAAd)func didClick(placementId: String)
Failed to Displayfunc didFail(toDisplay ad: MAAd, withError error: MAError)
Impression RecordedNot available by defaultfunc didRecordImpression(placementId: String, data: ImpressionData)
info

Note: Impression callbacks are not available by default in MAX, and expand/collapse events are not exposed in XMediator.

X3M Banner

MAX Banner


Key Differences

FeatureMAXXMediator
Ad IdentifierAd Unit IDPlacement ID
Ad ObjectMAAdViewBannerView
Delegate ProtocolMAAdViewAdDelegateBannerAdsDelegate
Impression DataMAAdvia didRecordImpression
Layout ApproachManual / Auto LayoutAuto Layout recommended

Interstitial Ads

This section helps you migrate Interstitial Ad implementation from AppLovin MAX SDK to XMediator SDK.


Interstitial API Method Comparison

OperationMAXXMediator
Set DelegateinterstitialAd.delegate = selfXMediatorAds.interstitial.addDelegate(self)
Load InterstitialinterstitialAd.load()XMediatorAds.interstitial.load(placementId:)
Show InterstitialinterstitialAd.show()XMediatorAds.interstitial.present(...)
Check ReadyinterstitialAd.isReadyXMediatorAds.interstitial.isReady() / XMediatorAds.interstitial.isReady(withPlacementId:)

info

In XMediator, isReady() returns true if any loaded ad is available, regardless of placement.
Use isReady(withPlacementId:) to check for a specific placement.


Built-in Behavior in XMediator

  • Auto-loading: Ads automatically reload after being dismissed or failing to show.
  • 🔁 Auto-retry: Failed loads are retried with exponential backoff.
  • 🛠️ Manual retry logic is not required.

Delegate Method Comparison

Event / ActionMAX (MAAdDelegate)XMediator (InterstitialAdsDelegate)
Loadedfunc didLoad(_ ad: MAAd)func didLoad(placementId: String, result: LoadResult)
Failed to Loadfunc didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError)Not exposed — handled internally
Displayedfunc didDisplay(_ ad: MAAd)func didPresent(placementId: String)
Clickedfunc didClick(_ ad: MAAd)func didClick(placementId: String)
Dismissedfunc didHide(_ ad: MAAd)func didDismiss(placementId: String)
Failed to Presentfunc didFail(toDisplay ad: MAAd, withError error: MAError)func failedToPresent(placementId: String, error: PresentError)
Will Dismissfunc willDismiss(placementId: String)
Impression/Revenuefunc didPayRevenue(_ ad: MAAd)func didRecordImpression(placementId: String, data: ImpressionData)

Key Differences

FeatureMAXXMediator
Ad IdentifierAd Unit IDPlacement ID
Ad ObjectMAInterstitialAdInternal singleton via XMediatorAds.interstitial
Delegate AssignmentinterstitialAd.delegate = selfXMediatorAds.interstitial.addDelegate(self)
Show MethodinterstitialAd.show()present(...) or present(withPlacementId:...)
Retry BehaviorManual retry with backoff recommendedAutomatic with exponential backoff
Impression DatadidPayRevenue(_:)didRecordImpression(...)

X3M Interstitial MAX Interstitial


Rewarded Ads

This section helps you migrate Rewarded Ad implementation from AppLovin MAX SDK to XMediator SDK.


Rewarded API Method Comparison

OperationMAXXMediator
Set DelegaterewardedAd.delegate = selfXMediatorAds.rewarded.addDelegate(self)
Load RewardedrewardedAd.load()XMediatorAds.rewarded.load(placementId:)
Show RewardedrewardedAd.show()XMediatorAds.rewarded.present(fromViewController: self, fromAdSpace: "rewarded-ad-space")

Built-in Behavior in XMediator

  • Auto-loading: Ads automatically reload after being dismissed or failing to show.
  • 🔁 Auto-retry: Failed loads are retried with exponential backoff.
  • 🛠️ Manual retry logic is not required.

Delegate Method Comparison

Event / ActionMAX (MARewardedAdDelegate)XMediator (RewardedAdsDelegate)
Loadedfunc didLoad(_ ad: MAAd)func didLoad(placementId: String, result: LoadResult)
Failed to Loadfunc didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError)Not exposed — handled internally
Displayedfunc didDisplay(_ ad: MAAd)func didPresent(placementId: String)
Failed to Presentfunc didFail(toDisplay ad: MAAd, withError error: MAError)func failedToPresent(placementId: String, error: PresentError)
Clickedfunc didClick(_ ad: MAAd)func didClick(placementId: String)
Closed/Dismissedfunc didHide(_ ad: MAAd)func didDismiss(placementId: String)
Will Dismissfunc willDismiss(placementId: String)
Impression/Revenuefunc didPayRevenue(_ ad: MAAd)func didRecordImpression(placementId: String, data: ImpressionData)
Rewardedfunc didRewardUser(for ad: MAAd, with reward: MAReward)func didEarnReward(placementId: String)

Key Differences

FeatureMAXXMediator
Ad IdentifierAd Unit IDPlacement ID
Ad ObjectMARewardedAd.shared(...)Singleton via XMediatorAds.rewarded
Delegate AssignmentrewardedAd.delegate = selfXMediatorAds.rewarded.addDelegate(self)
Show MethodrewardedAd.show()present(...) or present(withPlacementId:...)
Manual RetryRecommendedNot needed – auto-retries are built-in
Reward CallbackdidRewardUser(...)didReward(...)
Impression Datavia didPayRevenuevia didRecordImpression(...)

X3M Rewarded MAX Rewarded